"""
文档嵌入模型，提供将文本编码为向量的能力，既文档向量化。文档的写入和用户查询匹配前都会先执行文档嵌入编码，既向量化。
"""
import os
from http import HTTPStatus

import dotenv
import dashscope
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

from chapter01.AliyunDashScopeEmbeddings import AliyunDashScopeEmbeddings

#使用阿里百炼的HTTP POST接口
#句子的向量化
def fun_1():
    dotenv.load_dotenv()
    embedding = AliyunDashScopeEmbeddings(os.getenv("EMBEDDING_MODEL"))
    response = embedding.embed_query("你好")
    print(response)
    print(len(response))


#fun_1()


#使用OpenAI的API接口，这里使用阿里百炼的
#TODO 有问题，总是提示传入的参数不是字符串
def fun_2():
    dotenv.load_dotenv()

    embedding_model = OpenAIEmbeddings(
        model=os.getenv("EMBEDDING_MODEL")
        , base_url=os.getenv("BASE_URL")
        , api_key=os.getenv("API_KEY")
    )

    response = embedding_model.embed_query("hello")
    print(response)
    print(len(response))

#fun_2()


#这里使用阿里自己的dashscope方式
def fun_3():
    dotenv.load_dotenv()
    resp = dashscope.TextEmbedding.call(
        api_key=os.getenv("API_KEY"),
        model="text-embedding-v4",
        input='衣服的质量杠杠的，很漂亮，不枉我等了这么久啊，喜欢，以后还来这里买',
        dimension=1024,  # 指定向量维度（仅 text-embedding-v3及 text-embedding-v4支持该参数）
        output_type="dense&sparse"
    )

    print(resp.output)

#fun_3()

# CLOSE_MODEL_NAME=
# CLOSE_BASE_URL=https://api.openai-proxy.org/v1
# CLOSE_API_KEY=sk-y35D90jWm8g0pL7m5gSpgWFoj9chjFwVc1AEuRHzXHYrCkEB
# CLOSE_EMBEDDING_MODEL=text-embedding-ada-002

#跟fun2一样的代码，只是使用CLOSE AI平台的，这里正常。https://platform.closeai-asia.com/
def fun_4():
    dotenv.load_dotenv()
    embedding_model = OpenAIEmbeddings(
        model=os.getenv("CLOSE_EMBEDDING_MODEL")
        , base_url=os.getenv("CLOSE_BASE_URL")
        , api_key=os.getenv("CLOSE_API_KEY")
    )
    response = embedding_model.embed_query("hello")
    print(response)
    print(len(response)) #这里的长度 实际上就是向量的维度

fun_4()